#include "mypushbutton.h"
#include <QDebug>
#include <QPropertyAnimation>           //动画的头文件

MyPushButton::MyPushButton(QString normalPath,QString pressPath)
{
    //成员变量normalPath保存正常显示图片路径
    this->normalPath = normalPath;

    //成员变量pressPath保存按下后显示的图片
    this->pressPath = pressPath;

    //创建QPixmap对象
    QPixmap pixmap;

    //判断是否能够加载正常显示的图片，若不能提示加载失败并输出路径
    bool result = pixmap.load(this->normalPath);
    if (result == false)
    {
        QString errorPath = QString("图标加载失败！失败路径为：%1").arg(this->normalPath);
        qDebug() << errorPath;
    }
    else
    {
        //设置图片的固定尺寸
        this->setFixedSize(pixmap.width(),pixmap.height());

        //设置不规则图片的样式表
        this->setStyleSheet("QPushButton{border:0px;}");

        //设置图标
        this->setIcon(pixmap);

        //设置图标大小
        this->setIconSize(QSize(pixmap.width(),pixmap.height()));
    }
}
//上跳事件
void MyPushButton::upJump()
{
    //创建动画对象
    QPropertyAnimation* animation = new QPropertyAnimation(this,"geometry");

    //设置动画持续时间
    animation->setDuration(200);

    //设置起始位置
    animation->setStartValue(QRect(this->x(),this->y()+10,this->width(),this->height()));

    //设置结束位置
    animation->setEndValue(QRect(this->x(),this->y(),this->width(),this->height()));

   //设置缓和曲线，QEasingCurve::OutBounce 为弹跳效果
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //当动画结束删除对象（释放空间）
    animation->start(QAbstractAnimation::DeleteWhenStopped);
}
//下跳事件
void MyPushButton::downJump()
{
    //创建动画对象
    QPropertyAnimation* animation = new QPropertyAnimation(this,"geometry");

    //设置动画持续时间
    animation->setDuration(200);

    //设置起始位置
    animation->setStartValue(QRect(this->x(),this->y(),this->width(),this->height()));

    //设置结束位置
    animation->setEndValue(QRect(this->x(),this->y()+10,this->width(),this->height()));

    //设置缓和曲线，QEasingCurve::OutBounce 为弹跳效果
    animation->setEasingCurve(QEasingCurve::OutBounce);

    //当动画结束删除对象（释放空间）
    animation->start(QAbstractAnimation::DeleteWhenStopped);
}

//鼠标事件
void MyPushButton::mousePressEvent(QMouseEvent *e)
{
    //如果鼠标按下路径不为空，显示选中图片替换图案
    if (this->pressPath != "")
    {
        //创建QPixmap对象
        QPixmap pixmap;

        //判断是否能够加载正常显示的图片，若不能提示加载失败并输出路径
        bool result = pixmap.load(this->pressPath);
        if (result == false)
        {
            QString errorPath = QString("图标加载失败！失败路径为：%1").arg(this->normalPath);
            qDebug() << errorPath;
        }
        else
        {
            //设置图片的固定尺寸
            this->setFixedSize(pixmap.width(),pixmap.height());

             //设置不规则图片的样式表
            this->setStyleSheet("QPushButton{border:0px;}");

            //设置图标
            this->setIcon(pixmap);

            //设置图标大小
            this->setIconSize(QSize(pixmap.width(),pixmap.height()));
        }
    }

    //将其余事件交予父类处理
    QPushButton::mousePressEvent(e);
}

void MyPushButton::mouseReleaseEvent(QMouseEvent *e)
{
    //替换为原图案
    if (this->pressPath != "")
    {
        //创建QPixmap对象
        QPixmap pixmap;

        //判断是否能够加载正常显示的图片，若不能提示加载失败并输出路径
        bool result = pixmap.load(this->normalPath);
        if (result == false)
        {
            QString errorPath = QString("图标加载失败！失败路径为：%1").arg(this->normalPath);
            qDebug() << errorPath;
        }
        else
        {
            //设置图片的固定尺寸
            this->setFixedSize(pixmap.width(),pixmap.height());

            //设置不规则图片的样式表
            this->setStyleSheet("QPushButton{border:0px;}");

            //设置图标
            this->setIcon(pixmap);

            //设置图标大小
            this->setIconSize(QSize(pixmap.width(),pixmap.height()));
        }
    }
    //交给父类执行 释放事件
    QPushButton::mouseReleaseEvent(e);
}
